package com.sondon.mayi.yicache;

import java.util.LinkedHashMap;
import java.util.Map.Entry;

/**
 * 
 * @ClassName: YiLRUMap
 * @package com.sondon.mayi.yicache
 * @author mayi
 * @date 2015-6-14 上午2:26:44
 * @Description: TODO(
 *               LinkedHashMap自身已经实现了顺序存储，默认情况下是按照元素的添加顺序存储，也可以启用按照访问顺序存储，即最近读取的数据放在最前面
 *               ，最早读取的数据放在最后面，然后它还有一个判断是否删除最老数据的方法，默认是返回false，即不删除数据，
 *               我们使用LinkedHashMap实现LRU缓存的方法就是对LinkedHashMap实现简单的扩展
 *               ，扩展方式有两种，一种是inheritance，一种是delegation，具体使用什么方式看个人喜好
 *                )
 * @version 1.0
 * 
 * @param <K>
 * @param <V>
 */
public class YiLRUMap<K, V> extends LinkedHashMap<K, V> {

	private static final long serialVersionUID = 6073578142634153754L;

	private int mCapacity;//初始定义的存储空间大小

	public YiLRUMap(int initialCapacity) {
		// LinkedHashMap的一个构造函数，当参数accessOrder为true时，即会按照访问顺序排序，最近访问的放在最前，最早访问的放在后面
		super(initialCapacity, 0.75F, true);
		mCapacity = initialCapacity;
	}

	//LinkedHashMap自带的判断是否删除最老的元素方法，默认返回false，即不删除老数据
	//我们要做的就是重写这个方法，当满足一定条件时删除老数据
	@Override
	protected boolean removeEldestEntry(Entry<K, V> eldest) {
		return size() > mCapacity;
	}
}
